/**
 * 封装的目的是为了保证变量的安全性，使用private修饰符，外部类、同一个包中的类、子类，都无法访问。使用者不必在意具体实现细节，而只是通过外部接口即可访问类的成员
 * 如果不进行封装，类中的实例变量就可以直接查看和修改，可能给整个代码带来不好的影响和隐患。就比如你告诉别人年龄和别人直接看你身份证的区别。
 * 因为一般在编写时把成员变量私有化，外部类使用getter和setter方法来查看和设置变量
 * 封装思想就是把实现细节隐藏了，外部只需知道这个方法什么作用，而无需关心实现，通过访问权限控制来实现
 */
package com.test.Encapsulation_Inheritance_Polymorphism;

public class Student {
    private String name;
    private int age;
    public boolean gender;

    //在空白处点右键，generate-Constructor-然后把想要构造的变量选上，idea自动帮我们填写构造方法
    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    //输入一个public或get或set，idea自动帮我们把getAge(),getName(),void setAge(),void setName()联想出来，非常智能
    public int getAge() {
        return age;
    }

    public String getName() {
        return name;
    }

    //现在外部只能通过我定义的一些方法来获取成员属性，而我们可以在这个方法中进行一些额外的操作，比如小明可以修改名字，但名字中不能包含“小”字

    public void setName(String name) {
        if(name.contains("小")) return;  //发现有包含“小”字，直接返回void空
        this.name = name;
    }
    //单独开放给外部设置名称的方法，代码还需要进行一些额外的处理，所以不能给外部直接操作成员变量的权限

    public void study(){
        System.out.println("我爱学习，学习使我妈快乐");
    }

    protected void baohu(){  //protected方法在类实例化的时候自动运行
        System.out.println("我是父类protected方法");
    }
}
